package com.xuecheng.media.service;

import com.xuecheng.base.model.PageParams;
import com.xuecheng.base.model.PageResult;
import com.xuecheng.base.model.RestResponse;
import com.xuecheng.media.model.dto.QueryMediaParamsDto;
import com.xuecheng.media.model.dto.UploadFileParamsDto;
import com.xuecheng.media.model.dto.UploadFileResultDto;
import com.xuecheng.media.model.po.MediaFiles;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * @description 媒资文件管理业务类
 * @author Mr.M
 * @date 2022/9/10 8:55
 * @version 1.0
 */
public interface MediaFileService {

 /**
  * @param pageParams          分页参数
  * @param queryMediaParamsDto 查询条件
  * @return com.xuecheng.base.model.PageResult<com.xuecheng.media.model.po.MediaFiles>
  * @description 媒资文件查询方法
  * @author Mr.M
  * @date 2022/9/10 8:57
  */
 public PageResult<MediaFiles> queryMediaFiels(Long companyId, PageParams pageParams, QueryMediaParamsDto queryMediaParamsDto);


 /**
  * 文件上传的通用接口
  *
  * @param companyId  机构的ID
  * @param dto        上传文件的信息
  * @param bytes      文件的字节数组
  * @param folder     桶下边的子目录
  * @param objectName 桶当中的对象名
  * @return
  */
 public UploadFileResultDto uploadFile(Long companyId, UploadFileParamsDto dto, byte[] bytes, String folder, String objectName);

 @Transactional
 //将文件上传到数据库
 public MediaFiles addMedisFilesToDb(Long companyId, String fileId, UploadFileParamsDto dto, String bucket_files, String objectName);


 /**
  * @param fileMd5 文件的md5
  * @return com.xuecheng.base.model.RestResponse<java.lang.Boolean> false不存在，true存在
  * @description 检查文件是否存在
  * @author Mr.M
  * @date 2022/9/13 15:38
  */
 public RestResponse<Boolean> checkFile(String fileMd5);

 /**
  * @param fileMd5    文件的md5
  * @param chunkIndex 分块序号
  * @return com.xuecheng.base.model.RestResponse<java.lang.Boolean> false不存在，true存在
  * @description 检查分块是否存在
  * @author Mr.M
  * @date 2022/9/13 15:39
  */
 public RestResponse<Boolean> checkChunk(String fileMd5, int chunkIndex);

 /**
  * @param fileMd5 文件md5
  * @param chunk   分块序号
  * @param bytes   文件字节
  * @return com.xuecheng.base.model.RestResponse
  * @description 上传分块
  * @author Mr.M
  * @date 2022/9/13 15:50
  */
 public RestResponse uploadChunk(String fileMd5, int chunk, byte[] bytes);


 /**
  * @param companyId           机构id
  * @param fileMd5             文件md5
  * @param chunkTotal          分块总和
  * @param uploadFileParamsDto 文件信息
  * @return com.xuecheng.base.model.RestResponse
  * @description 合并分块
  * @author Mr.M
  * @date 2022/9/13 15:56
  */
 public RestResponse mergechunks(Long companyId, String fileMd5, int chunkTotal, UploadFileParamsDto uploadFileParamsDto);


 /**
  * @description 根据id查询文件信息
  * @param id  文件id
  * @return com.xuecheng.media.model.po.MediaFiles 文件信息
  * @author Mr.M
  * @date 2022/9/13 17:47
  */
 public MediaFiles getFileById(String id);
}